#include<iostream>
#include<string>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<map>
#include<vector>
using namespace std;

pthread_mutex_t lock;


int main(int argc,char**argv)
{
    map<int,vector<string>> RankList;//C++map自身有序，后vector容器存储分数相同的人.键为分数。
    int cnt=0;
    for(auto it=RankList.rbegin();it!=RankList.end();it++)//逆序便利map求分数最大的三人
    {
        for(auto str:it.second)
        {
            cout<<str;
            cnt++;
            if(cnt==3)
            {break;}
        }
        if(cnt==3)
        {
            break;//求最大的三人，如果为三break，如果总排行不足三人也能通过for循环条件退出。
        }
    }


    //以下为查询自身附近10人的情况，假设在游戏登陆时已经记录玩家的分数与姓名。

    string name="cnt";
    int score=100;

    int cnt=0;
    int i=0;
    for(auto str:RankList[score])
    {
        if(str==name)
        {
            break;
        }
        i++;//确定玩家在分数中的具体位置。
    }
    while(cnt<10)
    {
        auto it=RankList.begin();
        while(it->first!=score)
        {
            it++;
        }
        if(it->second.size()>10)//当玩家所处分段超过10个人
        {
            int j=i;
            while(cnt<10)
            {
                if(i>0)
                {
                    cout<<it->second[i];
                }
                if(j<second.size())
                {
                    cout<<it->second[j];
                }
                cnt++;
            }
        }
        else//如果同一分段不足10人则移动迭代器前移或者后移动
        {
            auto it1=it+1;
            while(cnt<10)
            {
                for(auto i:RankList[score])//先输出同分段所有人
                {
                    cout<<i;
                }
                if(it!=RankList.begin())
                {
                    it=it-1;
                    //输出分数低的一些人
                    cnt++;
                }
                if(it1!=RankList.end())
                {
                    //输出分数高的人
                    cnt++;
                }
            }
        }

    }

    return 0;
}
